CWS-TOOLING: integrate CWS cmcfixes62
2009-09-22 21:19:24 +0200 cmc r276365 : #i100000# that's the most plausible explanation, -D$(CVER) is needed by scp2 under windows
2009-09-19 16:10:36 +0200 cmc r276303 : #i100000# revert this for no partically good reason
2009-09-18 14:16:47 +0200 cmc r276279 : remove extra build depend
2009-09-18 08:56:15 +0200 cmc r276265 : #i100000# rerun autoconf
2009-09-17 14:59:38 +0200 cmc r276245 : CWS-TOOLING: rebase CWS cmcfixes62 to trunk@276192 (milestone: DEV300:m59)
2009-09-10 16:40:49 +0200 pl r276041 : fix warning
2009-09-10 11:34:55 +0200 pl r276026 : disable warning from system header
2009-09-09 19:30:45 +0200 pl r276013 : use osl_getAsciiFunctionSymbol instead of strange cast
2009-09-09 19:25:32 +0200 pl r276012 : add some casting hacks to make compile on solaris cc
2009-09-09 19:10:48 +0200 pl r276009 : add missing Configure option for solaris sparce 32bit
2009-09-09 18:37:05 +0200 pl r276008 : merge fix for #i104525# into moved code
2009-09-07 13:28:08 +0200 cmc r275894 : CWS-TOOLING: rebase CWS cmcfixes62 to trunk@275801 (milestone: DEV300:m57)
2009-08-28 12:36:27 +0200 cmc r275523 : CWS-TOOLING: rebase CWS cmcfixes62 to trunk@275331 (milestone: DEV300:m56)
2009-08-26 12:56:18 +0200 cmc r275413 : #i104088# use the right headers in the right place
2009-08-25 17:07:50 +0200 cmc r275372 : #i104500# make openssl build on linux that isn't x86 or x86_64
2009-08-25 13:08:48 +0200 cmc r275347 : #i89237# pretty picswitch up
2009-08-25 10:58:09 +0200 cmc r275342 : #i104489# remove last unused code in starmath
2009-08-25 10:23:33 +0200 cmc r275338 : #i104088# clean up the define post-move
2009-08-24 13:46:57 +0200 cmc r275310 : #i104088# 64bit odbc api changes
2009-08-24 13:42:52 +0200 cmc r275309 : #i89237# unify linux platform mks under a generic parent
2009-08-24 13:19:52 +0200 cmc r275307 : #i104455# remove unused code
2009-08-24 13:10:56 +0200 cmc r275306 : #i104088# 64bit odbc api changes
2009-08-24 10:07:50 +0200 cmc r275293 : #i104306# move recent-used to vcl
2009-08-24 09:32:08 +0200 cmc r275291 : #i104306# move recent-used to vcl
2009-08-23 22:01:07 +0200 cmc r275286 : #i104306# move recently-used to vcl
2009-08-22 15:25:25 +0200 cmc r275285 : #i104088# 64bit odbc api changes
2009-08-21 17:52:40 +0200 cmc r275268 : #i104306# move recently-used to vcl
2009-08-21 14:38:26 +0200 cmc r275257 : #i104408 make these headers ready for c++0x
2009-08-21 14:20:19 +0200 cmc r275251 : #i104406# avoid overlapping strcpy to avoid bustage on recent toolchains
2009-08-21 14:14:25 +0200 cmc r275250 : #i104385# silence 64bit warnings
diff --git a/unotools/inc/unotools/idhelper.hxx b/unotools/inc/unotools/idhelper.hxx
index 2fcac85..a2aa28d 100644
--- a/unotools/inc/unotools/idhelper.hxx
+++ b/unotools/inc/unotools/idhelper.hxx
@@ -125,9 +125,6 @@
static void release(); \
\
static ::com::sun::star::uno::Sequence< sal_Int8 > getImplementationId( \
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XTypeProvider >& _rxProvider); \
\
static ::com::sun::star::uno::Sequence< sal_Int8 > getImplementationId( \
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >& _rTypes); \
\
private: \
@@ -182,16 +179,6 @@
\
/*-----------------------------------------------------------------------*/ \
::com::sun::star::uno::Sequence< sal_Int8 > classname::getImplementationId( \
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XTypeProvider >& _rxProvider) \
{ \
::osl::MutexGuard aGuard(s_aMutex); \
if (_rxProvider.is()) \
return getImplementationId(_rxProvider->getTypes()); \
return ::com::sun::star::uno::Sequence< sal_Int8 >(); \
} \
\
/*-----------------------------------------------------------------------*/ \
::com::sun::star::uno::Sequence< sal_Int8 > classname::getImplementationId( \
const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >& _rTypes) \
{ \
::osl::MutexGuard aGuard(s_aMutex); \
diff --git a/vcl/aqua/inc/salinst.h b/vcl/aqua/inc/salinst.h
index 82ac5b6..5b1cf0d 100644
--- a/vcl/aqua/inc/salinst.h
+++ b/vcl/aqua/inc/salinst.h
@@ -143,6 +143,7 @@
virtual void DestroyMenuItem( SalMenuItem* );
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
virtual void SetEventCallback( void* pInstance, bool(*pCallback)(void*,void*,int) );
virtual void SetErrorEventCallback( void* pInstance, bool(*pCallback)(void*,void*,int) );
diff --git a/vcl/aqua/source/app/salinst.cxx b/vcl/aqua/source/app/salinst.cxx
index 56bf1a6..e4037df 100644
--- a/vcl/aqua/source/app/salinst.cxx
+++ b/vcl/aqua/source/app/salinst.cxx
@@ -55,6 +55,14 @@
#include "saltimer.h"
#include "vclnsapp.h"
#include <comphelper/processfactory.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/uri/XExternalUriReferenceTranslator.hpp>
#include <com/sun/star/uri/ExternalUriReferenceTranslator.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include "premac.h"
#include <Foundation/Foundation.h>
#include <ApplicationServices/ApplicationServices.h>
@@ -64,6 +72,7 @@
using namespace std;
using namespace ::com::sun::star;
extern BOOL ImplSVMain();
@@ -1029,6 +1038,83 @@
return (void*)"";
}
// We need to re-encode file urls because osl_getFileURLFromSystemPath converts
// to UTF-8 before encoding non ascii characters, which is not what other apps expect.
static rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl)
{
rtl::OUString extUrl;
uno::Reference< lang::XMultiServiceFactory > sm = comphelper::getProcessServiceFactory();
if (sm.is())
{
uno::Reference< beans::XPropertySet > pset;
sm->queryInterface( getCppuType( &pset )) >>= pset;
if (pset.is())
{
uno::Reference< uno::XComponentContext > context;
static const rtl::OUString DEFAULT_CONTEXT( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) );
pset->getPropertyValue(DEFAULT_CONTEXT) >>= context;
if (context.is())
extUrl = uri::ExternalUriReferenceTranslator::create(context)->translateToExternal(internalUrl);
}
}
return extUrl;
}
// #i104525# many versions of OSX have problems with some URLs:
// when an app requests OSX to add one of these URLs to the "Recent Items" list
// then this app gets killed (TextEdit, Preview, etc. and also OOo)
static bool isDangerousUrl( const rtl::OUString& rUrl )
{
// use a heuristic that detects all known cases since there is no official comment
// on the exact impact and root cause of the OSX bug
const int nLen = rUrl.getLength();
const sal_Unicode* p = rUrl.getStr();
for( int i = 0; i < nLen-3; ++i, ++p ) {
if( p[0] != '%' )
continue;
// escaped percent?
if( (p[1] == '2') && (p[2] == '5') )
return true;
// escapes are considered to be UTF-8 encoded
// => check for invalid UTF-8 leading byte
if( (p[1] != 'f') && (p[1] != 'F') )
continue;
int cLowNibble = p[2];
if( (cLowNibble >= '0' ) && (cLowNibble <= '9'))
return false;
if( cLowNibble >= 'a' )
cLowNibble -= 'a' - 'A';
if( (cLowNibble < 'A') || (cLowNibble >= 'C'))
return true;
}
return false;
}
void AquaSalInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& /*rMimeType*/)
{
// Convert file URL for external use (see above)
rtl::OUString externalUrl = translateToExternalUrl(rFileUrl);
if( 0 == externalUrl.getLength() )
externalUrl = rFileUrl;
if( externalUrl.getLength() && !isDangerousUrl( externalUrl ) )
{
NSString* pString = CreateNSString( externalUrl );
NSURL* pURL = [NSURL URLWithString: pString];
if( pURL )
{
NSDocumentController* pCtrl = [NSDocumentController sharedDocumentController];
[pCtrl noteNewRecentDocumentURL: pURL];
}
if( pString )
[pString release];
}
}
// -----------------------------------------------------------------------
SalTimer* AquaSalInstance::CreateSalTimer()
diff --git a/vcl/inc/vcl/salinst.hxx b/vcl/inc/vcl/salinst.hxx
index 650e57c..f8c1488 100644
--- a/vcl/inc/vcl/salinst.hxx
+++ b/vcl/inc/vcl/salinst.hxx
@@ -184,6 +184,7 @@
CreateClipboard( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& i_rArguments );
virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDragSource();
virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDropTarget();
virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType) = 0;
};
// called from SVMain
diff --git a/vcl/inc/vcl/svapp.hxx b/vcl/inc/vcl/svapp.hxx
index f853fae..1e0c521 100644
--- a/vcl/inc/vcl/svapp.hxx
+++ b/vcl/inc/vcl/svapp.hxx
@@ -479,6 +479,20 @@
*/
static const ::rtl::OUString& GetDesktopEnvironment();
/** Add a file to the system shells recent document list if there is any.
This function may have no effect under Unix because there is no
standard API among the different desktop managers.
@param rFileUrl
The file url of the document.
@param rMimeType
The mime content type of the document specified by aFileUrl.
If an empty string will be provided "application/octet-stream"
will be used.
*/
static void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
private:
DECL_STATIC_LINK( Application, PostEventHandler, void* );
diff --git a/vcl/os2/inc/salinst.h b/vcl/os2/inc/salinst.h
index 119324c..ba8dc7d 100644
--- a/vcl/os2/inc/salinst.h
+++ b/vcl/os2/inc/salinst.h
@@ -96,6 +96,7 @@
virtual void DestroyMenuItem( SalMenuItem* );
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
};
SalFrame* ImplSalCreateFrame( Os2SalInstance* pInst, HWND hWndParent, ULONG nSalFrameStyle );
diff --git a/vcl/os2/source/app/salinst.cxx b/vcl/os2/source/app/salinst.cxx
index a14881c..d4d324ad 100644
--- a/vcl/os2/source/app/salinst.cxx
+++ b/vcl/os2/source/app/salinst.cxx
@@ -811,6 +811,10 @@
return (void*) "";
}
void Os2SalInstance::AddToRecentDocumentList(const rtl::OUString& /*rFileUrl*/, const rtl::OUString& /*rMimeType*/)
{
}
// -----------------------------------------------------------------------
SalTimer* Os2SalInstance::CreateSalTimer()
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index b53cecee..6057409 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -1989,6 +1989,12 @@
return SalGetDesktopEnvironment();
}
void Application::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType)
{
ImplSVData* pSVData = ImplGetSVData();
pSVData->mpDefInst->AddToRecentDocumentList(rFileUrl, rMimeType);
}
BOOL Application::IsAccessibilityEnabled()
{
return FALSE;
diff --git a/vcl/unx/gtk/app/gtkinst.cxx b/vcl/unx/gtk/app/gtkinst.cxx
index 8bed40f..af3a1df 100644
--- a/vcl/unx/gtk/app/gtkinst.cxx
+++ b/vcl/unx/gtk/app/gtkinst.cxx
@@ -216,6 +216,34 @@
return new GtkSalObject( static_cast<GtkSalFrame*>(pParent), bShow );
}
extern "C"
{
typedef void*(* getDefaultFnc)();
typedef void(* addItemFnc)(void *, const char *);
}
void GtkInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType)
{
#if GTK_CHECK_VERSION(2,10,0)
GtkRecentManager *manager = gtk_recent_manager_get_default ();
gtk_recent_manager_add_item (manager, rtl::OUStringToOString(rFileUrl, RTL_TEXTENCODING_UTF8).getStr());
(void)rMimeType;
#else
static getDefaultFnc sym_gtk_recent_manager_get_default =
(getDefaultFnc)osl_getAsciiFunctionSymbol( GetSalData()->m_pPlugin, "gtk_recent_manager_get_default" );
static addItemFnc sym_gtk_recent_manager_add_item =
(addItemFnc)osl_getAsciiFunctionSymbol( GetSalData()->m_pPlugin, "gtk_recent_manager_add_item");
if (sym_gtk_recent_manager_get_default && sym_gtk_recent_manager_add_item)
{
sym_gtk_recent_manager_add_item(sym_gtk_recent_manager_get_default(),
rtl::OUStringToOString(rFileUrl, RTL_TEXTENCODING_UTF8).getStr());
}
else
X11SalInstance::AddToRecentDocumentList(rFileUrl, rMimeType);
#endif
}
GtkYieldMutex::GtkYieldMutex()
{
}
diff --git a/vcl/unx/headless/svpinst.cxx b/vcl/unx/headless/svpinst.cxx
index 87d0e46..7b93e59 100644
--- a/vcl/unx/headless/svpinst.cxx
+++ b/vcl/unx/headless/svpinst.cxx
@@ -504,6 +504,10 @@
}
}
void SvpSalInstance::AddToRecentDocumentList(const rtl::OUString&, const rtl::OUString&)
{
}
SvpSalTimer::~SvpSalTimer()
{
}
diff --git a/vcl/unx/headless/svpinst.hxx b/vcl/unx/headless/svpinst.hxx
index 71c463f..e77debb 100644
--- a/vcl/unx/headless/svpinst.hxx
+++ b/vcl/unx/headless/svpinst.hxx
@@ -193,6 +193,8 @@
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
};
#endif // _SV_SALINST_HXX
diff --git a/vcl/unx/inc/plugins/gtk/gtkinst.hxx b/vcl/unx/inc/plugins/gtk/gtkinst.hxx
index 22c50f6..16dce46 100644
--- a/vcl/unx/inc/plugins/gtk/gtkinst.hxx
+++ b/vcl/unx/inc/plugins/gtk/gtkinst.hxx
@@ -91,6 +91,7 @@
virtual SalFrame* CreateChildFrame( SystemParentData* pParent, ULONG nStyle );
virtual SalObject* CreateObject( SalFrame* pParent, SystemWindowData* pWindowData, BOOL bShow = TRUE );
virtual SalSystem* CreateSalSystem();
virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
};
class GtkSalSystem : public X11SalSystem
diff --git a/vcl/unx/inc/salinst.h b/vcl/unx/inc/salinst.h
index bef5cfd..399326c 100644
--- a/vcl/unx/inc/salinst.h
+++ b/vcl/unx/inc/salinst.h
@@ -121,6 +121,8 @@
CreateClipboard( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& i_rArguments );
virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDragSource();
virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface > CreateDropTarget();
virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
bool isPrinterInit() const
{
diff --git a/vcl/unx/source/app/salinst.cxx b/vcl/unx/source/app/salinst.cxx
index d84b7fa..1dc2d14 100644
--- a/vcl/unx/source/app/salinst.cxx
+++ b/vcl/unx/source/app/salinst.cxx
@@ -35,6 +35,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <osl/module.hxx>
#include "salunx.h"
#include "saldata.hxx"
@@ -413,3 +415,20 @@
#endif /* SOLARIS */
}
extern "C" { static void SAL_CALL thisModule() {} }
void X11SalInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType)
{
const rtl::OUString SYM_ADD_TO_RECENTLY_USED_FILE_LIST(RTL_CONSTASCII_USTRINGPARAM("add_to_recently_used_file_list"));
const rtl::OUString LIB_RECENT_FILE(RTL_CONSTASCII_USTRINGPARAM("librecentfile.so"));
typedef void (*PFUNC_ADD_TO_RECENTLY_USED_LIST)(const rtl::OUString&, const rtl::OUString&);
PFUNC_ADD_TO_RECENTLY_USED_LIST add_to_recently_used_file_list = 0;
osl::Module module;
module.loadRelative( &thisModule, LIB_RECENT_FILE );
if (module.is())
add_to_recently_used_file_list = (PFUNC_ADD_TO_RECENTLY_USED_LIST)module.getFunctionSymbol(SYM_ADD_TO_RECENTLY_USED_FILE_LIST);
if (add_to_recently_used_file_list)
add_to_recently_used_file_list(rFileUrl, rMimeType);
}
diff --git a/vcl/win/inc/salinst.h b/vcl/win/inc/salinst.h
index 26afe89..33a1a94 100644
--- a/vcl/win/inc/salinst.h
+++ b/vcl/win/inc/salinst.h
@@ -88,6 +88,7 @@
virtual void DestroyMenuItem( SalMenuItem* );
virtual SalSession* CreateSalSession();
virtual void* GetConnectionIdentifier( ConnectionIdentifierType& rReturnedType, int& rReturnedBytes );
virtual void AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType);
static int WorkaroundExceptionHandlingInUSER32Lib(int nExcept, LPEXCEPTION_POINTERS pExceptionInfo);
};
diff --git a/vcl/win/source/app/salinst.cxx b/vcl/win/source/app/salinst.cxx
index d57cdd4..2b5ac6d 100644
--- a/vcl/win/source/app/salinst.cxx
+++ b/vcl/win/source/app/salinst.cxx
@@ -39,7 +39,7 @@
#ifdef __MINGW32__
#include <excpt.h>
#endif
#include <osl/file.hxx>
#include <vos/mutex.hxx>
#include <tools/debug.hxx>
#include <wincomp.hxx>
@@ -65,11 +65,13 @@
#if defined _MSC_VER
#pragma warning(push, 1)
#pragma warning( disable: 4917 )
#endif
#include <GdiPlus.h>
#include <GdiPlusEnums.h>
#include <GdiPlusColor.h>
#include <Shlobj.h>
#if defined _MSC_VER
#pragma warning(pop)
@@ -456,10 +458,10 @@
{
SalData* pSalData = new SalData;
CoInitialize(0);
// init GDIPlus
static Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&pSalData->gdiplusToken, &gdiplusStartupInput, NULL);
// init GDIPlus
static Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&pSalData->gdiplusToken, &gdiplusStartupInput, NULL);
}
@@ -471,7 +473,7 @@
// deinit GDIPlus
if(pSalData)
{
Gdiplus::GdiplusShutdown(pSalData->gdiplusToken);
Gdiplus::GdiplusShutdown(pSalData->gdiplusToken);
}
delete pSalData;
@@ -1089,6 +1091,26 @@
// -----------------------------------------------------------------------
/** Add a file to the system shells recent document list if there is any.
This function may have no effect under Unix because there is no
standard API among the different desktop managers.
@param aFileUrl
The file url of the document.
*/
void WinSalInstance::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& /*rMimeType*/)
{
rtl::OUString system_path;
osl::FileBase::RC rc = osl::FileBase::getSystemPathFromFileURL(rFileUrl, system_path);
OSL_ENSURE(osl::FileBase::E_None == rc, "Invalid file url");
if (osl::FileBase::E_None == rc)
SHAddToRecentDocs(SHARD_PATHW, system_path.getStr());
}
// -----------------------------------------------------------------------
SalTimer* WinSalInstance::CreateSalTimer()
{
return new WinSalTimer();